#include <Arduino.h>
#include <ArduinoJson.h>
// 自定义模块
#include "Senser/SenserConfig.h"
#include "MqttModule/MyMqtt.h"


// 上次感应到人的时间
unsigned long lastMotionTime = 0;
// 上次打印消息的时间
unsigned long lastMessageTime = 0;
// 超时时间
const unsigned long timeout = 60000;

bool hasPrintedMotionMessage = false;

String createPirMessage(String status)
{
    StaticJsonDocument<200> doc;
    doc["type"] = "Pir";
    doc["device"] = macAddress;
    doc["status"] = status;

    String jsonString;
    serializeJson(doc, jsonString);
    return jsonString;
}

void reflushPirSenser()
{
    // 获取当前时间
    unsigned long currentTime = millis();
    // 读取PIR传感器的状态
    int sensorValue = digitalRead(pirSenserPin);
    //  Serial.print("Pir value:");
    //   Serial.println(sensorValue);
    // 检测是否有人经过
    if (sensorValue == HIGH)
    {
        if (!hasPrintedMotionMessage)
        {
            //Serial.println("有人经过");
            mqClient.publish("esp32/senser/", createPirMessage("findPeople").c_str());
            hasPrintedMotionMessage = true;
        }
        // 更新最后感应到人的时间
        lastMotionTime = currentTime;
        lastMessageTime = currentTime;
    }
    else
    {
        // 检查是否超时
        if (currentTime - lastMotionTime >= timeout)
        {
            // 3分钟内没有人经过
            if (hasPrintedMotionMessage)
            {
                //Serial.println("没有人了");
                mqClient.publish("esp32/senser/", createPirMessage("noBody").c_str());
                hasPrintedMotionMessage = false;
            }
            lastMessageTime = currentTime;
        }
    }

    // 小延迟，以避免串口输出过于频繁
    delay(2000);
}

